<?php
//关于Pack: 

//下面的第一部分把数字值包装成字节：  
$out = pack("CCCC", 65, 66, 67, 68);      # $out 等于"ABCD"  
echo $out."<br/>";

$out = pack("C4", 65, 66, 67, 68);         # 一样的东西  
echo $out."<br/>";

//下面的对 Unicode 的循环字母做同样的事情：  
$foo = pack("U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);  
echo $foo."<br/>";

//下面的做类似的事情，增加了一些空：  
$out = pack("CCxxCC", 65, 66, 67, 68);      # $out 等于 "AB\0\0CD"  
echo $out."<br/>";

//打包你的短整数并不意味着你就可移植了：  
$out = pack("s2", 1, 2);
echo $out."<br/>";
      
# 在小头在前的机器上是 "\1\0\2\0"  
# 在大头在前的机器上是 "\0\1\0\2"  
  
//在二进制和十六进制包装上，count 指的是位或者半字节的数量，而不是生成的字节数量：  
$out = pack("B32", "...");  
echo $out."<br/>";
$out = pack("H8", "5065726c");         # 都生成“Perl”  
echo $out."<br/>";

//a 域里的长度只应用于一个字串：  
$out = pack("a4", "abcd", "x", "y", "z");      # "abcd"  
echo $out."<br/>";
 
//要绕开这个限制，使用多倍声明：  
$out = pack("aaaa",    "abcd", "x", "y", "z");   # "axyz"  
//$out = pack("a" x 4,   "abcd", "x", "y", "z");   # "axyz"  
echo $out."<br/>";

//a 格式做空填充：  
$out = pack("a14", "abcdefg");         # " abcdefg\0\0\0\0\0\0"  
echo $out."<br/>";

//++++++++++++++++++++++++++++++
//关于unpack:  
//++++++++++++++++++++++++++++++
//array unpack ( string $format, string $data )  
  
$data = "010000020007";  
unpack("Sint1/Cchar1/Sint2/Cchar2",$data);  
  
## array('int1'=>1, 'char1'=>'0','int2'=>2,'char2'=>7);  
  
//最后本文开头讲到的协议使用pack/unpack 举例程序代码为 ：  
$lastact   = pack('SCSa32a32',0x0040, 0x00, 0x0006, $username, $passwd );  
unpack('Sint1/Cchar1/Sint2/Cchar2/',$lastmessage);
?>